<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        //规则： 剪刀(3) 　< 石头(2) < 布(1)
        //思路：
        //    1.接收用户 输入的 一个数
        //    2.随机生成 1-3 之间的一个数
        //    3.两个数相减 判断胜负

        // 游戏比较的规则：
        //   剪刀(3) 　< 石头(2) < 布(1)
        //   布1 吃 石头2  -> -1
        //   石头2 吃 剪刀3  -> -1
        //   剪刀3 吃 布1 -> 2
        //   比大小 规则 结果 ： 用 两个 数 相减， 如果 结果是 -1 || 2 ，那么 前面 大于 后面

        // 假设：机器人  剪刀(3)      用户 布(1)
        //                     3 - 1 = 2
        //              布(1)            石头(2)
        //                     1 - 2 = -1
        //              剪刀(3)            石头(2)
        //                     3 - 2 = 1

        // Math.ceil(0) -> 0


        // 1.声明 主函数：包含 游戏 的 核心逻辑和交互
        function main() {
            while (true) {
                //1.接收 用户的 出拳
                let usrNum = +prompt('请输入 剪刀(3) 石头(2) 布(1) ,退出(4):');

                if (usrNum >= 4) {
                    alert('游戏结束啦~~~');
                    break;
                }

                //2.生成 机器人的 出拳 [1,3] -> 1<= x <=3
                let robNum = Math.floor(Math.random() * 3) + 1;
                //           floor([0,0.999999] * 3) + 1 -> floor([0,2.999999]) + 1 -> [0,2] + 1  -> [1,3]


                //3.用 机器人的 数 - 用户输入的数
                let res = robNum - usrNum;

                //4.规则判断 （机器人胜利：-1 or 2）
                if (res == -1 || res == 2) {
                    showRes('机器人胜利啦~~~', robNum, usrNum);
                } else if (res == 0) {
                    showRes('平局~~~~', robNum, usrNum);
                } else {
                    showRes('用户胜利啦~~~', robNum, usrNum);
                }

            }
        }

        // 调用主函数
        main();


        // 2.显示结果
        function showRes(msg, robN, usrN) {
            alert('机器人：【' + getName(robN) + '】\n用  户：【' + getName(usrN) + '】\n【' + msg + '】');
        }

        // 3.根据 数字 返回 出拳名字
        function getName(num) {
            switch (num) {
                case 1: {
                    return '布';
                }
                case 2: {
                    return '石头';
                }
                case 3: {
                    return '剪刀';
                }
            }
        }
    </script>
</head>

<body>

</body>
<!-- author:成都前端_JamesZou 
     from: https://www.jianshu.com/u/00a012fcb7e9
-->

</html>